home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / glibmm-2.4 / proc / m4 / class_gobject.m4 < prev    next >
M4 Source File  |  2006-04-20  |  6KB  |  241 lines

  1. dnl $Id: class_gobject.m4,v 1.6 2004/04/29 22:43:44 murrayc Exp $
  2.  
  3.  
  4. define(`_CLASS_GOBJECT',`dnl
  5. _PUSH()
  6. dnl
  7. dnl  Define the args for later macros
  8. define(`__CPPNAME__',`$1')
  9. define(`__CNAME__',`$2')
  10. define(`__CCAST__',`$3')
  11. define(`__BASE__',_LOWER(__CPPNAME__))
  12. define(`__CPPPARENT__',`$4')
  13. define(`__CPARENT__',`$5')
  14. define(`__PCAST__',`($5*)')
  15.  
  16. dnl Some C types, e.g. GdkWindow or GdkPixmap, are a typedef to their base type,
  17. dnl rather than the real instance type.  That is really ugly, yes.  We get around
  18. dnl the problem by supporting optional __REAL_* arguments to this macro.
  19. define(`__REAL_CNAME__',ifelse(`$6',,__CNAME__,`$6'))
  20. define(`__REAL_CPARENT__',ifelse(`$7',,__CPARENT__,`$7'))
  21.  
  22.  
  23. _POP()
  24. _SECTION(SECTION_CLASS2)
  25. ') dnl end of _CLASS_GOBJECT
  26.  
  27. dnl Widget and Object, and some others, have custom-written destructor implementations:
  28. define(`_CUSTOM_DTOR',`dnl
  29. _PUSH()
  30. dnl Define this macro to be tested for later.
  31. define(`__BOOL_CUSTOM_DTOR__',`$1')
  32. _POP()
  33. ')
  34.  
  35. dnl Gdk::Pixmap_Class::wrap_new() needs a custom implementation, in order
  36. dnl to create a Gdk::Bitmap object if appropriate.  See comments there.
  37. define(`_CUSTOM_WRAP_NEW',`dnl
  38. _PUSH()
  39. dnl Define this macro to be tested for later.
  40. define(`__BOOL_CUSTOM_WRAP_NEW__',`1')
  41. _POP()
  42. ')
  43.  
  44. dnl Gnome::Canvas::CanvasAA::CanvasAA() needs access to the
  45. dnl normally-private canvas_class_ member variable. See comments there.
  46. define(`_GMMPROC_PROTECTED_GCLASS',`dnl
  47. _PUSH()
  48. dnl Define this macro to be tested for later.
  49. define(`__BOOL_PROTECTED_GCLASS__',`1')
  50. _POP()
  51. ')
  52.  
  53. dnl Some of the Gdk types are actually direct typedefs of their base type.
  54. dnl This means that 2 wrap functions would have the same argument.
  55. dnl define(`_NO_WRAP_FUNCTION',`dnl
  56. dnl _PUSH()
  57. dnl Define this macro to be tested for later.
  58. dnl define(`__BOOL_NO_WRAP_FUNCTION__',`$1')
  59. dnl _POP()
  60. dnl ')
  61.  
  62. dnl
  63. dnl _CREATE_METHOD(args_type_and_name_hpp, args_type_and_name_cpp,args_name_only);
  64. dnl
  65. define(`_CREATE_METHOD',`
  66.   static Glib::RefPtr<`'__CPPNAME__`'> create(`'$1`');
  67. _PUSH(SECTION_CC)
  68. Glib::RefPtr<`'__CPPNAME__`'> __CPPNAME__`'::create(`'$2`')
  69. {
  70.   return Glib::RefPtr<`'__CPPNAME__`'>( new __CPPNAME__`'(`'$3`') );
  71. }
  72. _POP()
  73. ')
  74.  
  75.  
  76. dnl
  77. dnl _END_CLASS_GOBJECT()
  78. dnl   denotes the end of a class
  79. dnl
  80. define(`_END_CLASS_GOBJECT',`
  81. _SECTION(SECTION_HEADER1)
  82. ifdef(`__BOOL_NO_WRAP_FUNCTION__',`dnl
  83. ',`dnl
  84. _STRUCT_PROTOTYPE()
  85. ')dnl
  86.  
  87. __NAMESPACE_BEGIN__ class __CPPNAME__`'_Class; __NAMESPACE_END__
  88. _SECTION(SECTION_HEADER3)
  89.  
  90. ifdef(`__BOOL_NO_WRAP_FUNCTION__',`dnl
  91. ',`dnl
  92. namespace Glib
  93. {
  94.   /** @relates __NAMESPACE__::__CPPNAME__
  95.    * @param object The C instance
  96.    * @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref.
  97.    * @result A C++ instance that wraps this C instance.
  98.    */
  99.   Glib::RefPtr<__NAMESPACE__::__CPPNAME__> wrap(__REAL_CNAME__`'* object, bool take_copy = false);
  100. }
  101. ')dnl
  102.  
  103.  
  104. dnl
  105. dnl
  106. _SECTION(SECTION_PHEADER)
  107.  
  108. #include <glibmm/class.h>
  109.  
  110. __NAMESPACE_BEGIN__
  111.  
  112. _PH_CLASS_DECLARATION()
  113.  
  114. __NAMESPACE_END__
  115.  
  116. _SECTION(SECTION_SRC_GENERATED)
  117.  
  118. ifdef(`__BOOL_NO_WRAP_FUNCTION__',`dnl
  119. ',`dnl else
  120. namespace Glib
  121. {
  122.  
  123. Glib::RefPtr<__NAMESPACE__::__CPPNAME__> wrap(__REAL_CNAME__`'* object, bool take_copy)
  124. {
  125.   return Glib::RefPtr<__NAMESPACE__::__CPPNAME__>( dynamic_cast<__NAMESPACE__::__CPPNAME__*> (Glib::wrap_auto ((GObject*)(object), take_copy)) );
  126.   //We use dynamic_cast<> in case of multiple inheritance.
  127. }
  128.  
  129. } /* namespace Glib */
  130. ')dnl endif
  131.  
  132.  
  133.  
  134.  
  135. __NAMESPACE_BEGIN__
  136.  
  137.  
  138. /* The *_Class implementation: */
  139.  
  140. _PCC_CLASS_IMPLEMENTATION()
  141.  
  142. m4_ifdef(`__BOOL_CUSTOM_WRAP_NEW__',,`dnl else
  143. Glib::ObjectBase* __CPPNAME__`'_Class::wrap_new(GObject* object)
  144. {
  145.   return new __CPPNAME__`'((__CNAME__*)`'object);
  146. }
  147.  
  148. ')dnl endif
  149.  
  150. /* The implementation: */
  151.  
  152. __CNAME__* __CPPNAME__::gobj_copy()
  153. {
  154.   reference();
  155.   return gobj();
  156. }
  157.  
  158. __CPPNAME__::__CPPNAME__`'(const Glib::ConstructParams& construct_params)
  159. :
  160.   __CPPPARENT__`'(construct_params)
  161. {}
  162.  
  163. __CPPNAME__::__CPPNAME__`'(__CNAME__* castitem)
  164. :
  165.   __CPPPARENT__`'(__PCAST__`'(castitem))
  166. {}
  167.  
  168. ifdef(`__BOOL_CUSTOM_DTOR__',`dnl
  169. ',`dnl
  170. __CPPNAME__::~__CPPNAME__`'()
  171. {}
  172.  
  173. ')dnl
  174.  
  175.  
  176. _CC_CLASS_IMPLEMENTATION()
  177.  
  178. __NAMESPACE_END__
  179.  
  180. dnl
  181. dnl
  182. dnl
  183. dnl
  184. _POP()
  185. dnl
  186. dnl The actual class, e.g. Gtk::Widget, declaration:
  187. dnl _IMPORT(SECTION_H_SIGNALPROXIES_CUSTOM)
  188.  
  189. _IMPORT(SECTION_CLASS1)
  190.  
  191. #ifndef DOXYGEN_SHOULD_SKIP_THIS
  192.  
  193. public:
  194.   typedef __CPPNAME__ CppObjectType;
  195.   typedef __CPPNAME__`'_Class CppClassType;
  196.   typedef __CNAME__ BaseObjectType;
  197.   typedef __REAL_CNAME__`'Class BaseClassType;
  198.  
  199. m4_ifdef(`__BOOL_PROTECTED_GCLASS__',
  200. `protected:',`dnl else
  201. private:')dnl endif
  202.   friend class __CPPNAME__`'_Class;
  203.   static CppClassType `'__BASE__`'_class_;
  204.  
  205. private:
  206.   // noncopyable
  207.   __CPPNAME__`'(const __CPPNAME__&);
  208.   __CPPNAME__& operator=(const __CPPNAME__&);
  209.  
  210. protected:
  211.   explicit __CPPNAME__`'(const Glib::ConstructParams& construct_params);
  212.   explicit __CPPNAME__`'(__CNAME__* castitem);
  213.  
  214. #endif /* DOXYGEN_SHOULD_SKIP_THIS */
  215.  
  216. public:
  217.   virtual ~__CPPNAME__`'();
  218.  
  219. #ifndef DOXYGEN_SHOULD_SKIP_THIS
  220.   static GType get_type()      G_GNUC_CONST;
  221.   static GType get_base_type() G_GNUC_CONST;
  222. #endif
  223.  
  224.   ///Provides access to the underlying C GObject.
  225.   __CNAME__*       gobj()       { return reinterpret_cast<__CNAME__*>(gobject_); }
  226.  
  227.   ///Provides access to the underlying C GObject.
  228.   const __CNAME__* gobj() const { return reinterpret_cast<__CNAME__*>(gobject_); }
  229.  
  230.   ///Provides access to the underlying C instance. The caller is responsible for unrefing it. Use when directly setting fields in structs.
  231.   __CNAME__* gobj_copy();
  232.  
  233. private:
  234. _IMPORT(SECTION_CLASS2)
  235.  
  236. public:
  237. _H_VFUNCS_AND_SIGNALS()
  238.  
  239. ')
  240.  
  241.